package com.metis.document.parse.dialog.pipeline;

import com.alibaba.fastjson.JSON;
import com.metis.document.parse.dialog.models.dto.ParagraphTextElementDTO;
import com.metis.document.parse.dialog.models.dto.ParseResultDTO;
import com.metis.document.parse.dialog.utils.chaos.ChaosFileUtils;
import com.metis.document.parse.dialog.utils.chaos.ChaosUtils;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * 乱码文件过滤：
 */
@Slf4j
public class ChaosFileFilter {

    public static boolean filterChaosFile(ParseResultDTO parseResultDTO) {
        Collection<ParagraphTextElementDTO> paragraphs = parseResultDTO.getParagraphs();
        int originalParasize = paragraphs.size();
        // 使用迭代器遍历ArrayList并删除包含乱码的段落
        Iterator<ParagraphTextElementDTO> iterator = paragraphs.iterator();
        String text = "";
        while (iterator.hasNext()) {
            //第一步判断段落是否含有乱码,如果含有乱码则删除该段落
            String paragraphText = iterator.next().getText();
            text += paragraphText;
        }

        if (ChaosFileUtils.isChaosFile(text)) {
            log.info("当前文章包含乱码，或含不成文的文字，需要去除");
            log.debug("text：" + text);
            return true;
        }

        return false;
    }


    public static ParseResultDTO filterParseResultDTO(ParseResultDTO parseResultDTO) {
        Collection<ParagraphTextElementDTO> paragraphs = parseResultDTO.getParagraphs();
        int originalParasize = paragraphs.size();
        int removeCount = 0;
        // 使用迭代器遍历ArrayList并删除包含乱码的段落
        Iterator<ParagraphTextElementDTO> iterator = paragraphs.iterator();
        while (iterator.hasNext()) {
            //第一步判断段落是否含有乱码,如果含有乱码则删除该段落
            String paragraphText = iterator.next().getText();
            if (ChaosUtils.isContainChaosCode(paragraphText) || ChaosFileUtils.isChaosFile(paragraphText)) {
                log.info("当前段落包含乱码，或含不成文的文字，需要去除");
                log.debug("paragraphText：" + paragraphText);
                iterator.remove();
                removeCount++;
            }
        }

        if (paragraphs.size() == 0) {
            parseResultDTO = null;
        }
        //判断当前文章删除的比例：如果删除的比例大于0.6，则整篇文章不用再处理，即将parseResultDTO设置为空
        double removeRatio = (double) removeCount / originalParasize;
        log.info("removeCount:{}，paragraphsSize:{},removeRatio:{}", removeCount, originalParasize, removeRatio);
        if (paragraphs.size() > 0 && removeRatio > 0.6) {
            log.info("当前段落包含乱码，或含不成文的文字超过整篇文章的60%，当前文章置空，不再处理");
            parseResultDTO = null;
        }

        return parseResultDTO;
    }
}
